package com.hrsaas.ext.spider.test.handler;

import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;

import com.hrsaas.ext.spider.test.domain.Context;

/**
 * <p>
 * 功能：放缓频率进行简历拉取，一个账号对应一个定时器
 * <p>
 * @author wangxiaoliang@kanzhun.com
 *
 * 2018年9月3日
 */
public class SessionMaintain {

	// 存储待请求数据,阻塞队列，必须等待到一定时间依然无数据返回时，才可以取消定时，释放当前用户
	private BlockingQueue<Context> queue;
	
	private Timer timer;
	
	public SessionMaintain() {
		this.queue = new LinkedBlockingQueue<>();
		this.timer = new Timer();
		this.timer.scheduleAtFixedRate(new TimerTask() {
			@Override
			public void run() {
				try {
					Context context = queue.poll(30, TimeUnit.SECONDS);
					if (context == null) 
						throw new NullPointerException("can not load any context request");
					context.recovery();
				} catch (InterruptedException e) {
					// 没有获取到任何有效数据 ，定时器取消
					timer.cancel();
				}
			}
		}, 2000, 4000);
	}
	
	/**
	 * 添加上下文对象
	 * @param context
	 */
	public void addContext(Context context) {
		try {
			queue.put(context);
		} catch (InterruptedException e) {
			// ignore
		}
	}
	
}
